#include <blockQueue.hpp>                                                            
#include <Task.hpp>    
#include <pthread.h>   
#include <unistd.h> 
      
// 加法函数，用于生产者进程产生任务
int myAdd(int x, int y)    
{    
    return x + y;    
}    

// 消费者进程
void *consumer(void* args)    
{  
    BlockQueue<Task>* bqueue = (BlockQueue<Task>*)args;
    
    while(true)
    {
      // 获取任务
      Task t;
      bqueue->pop(&t); // 执行任务 + 销毁
      cout << pthread_self() << " consumer: " << t._x << " + " << t._y << " = " << t() << endl;
    }

    return nullptr;

}

// 生产者进程
void* productor(void* args)
{
  BlockQueue<Task>* bqueue = (BlockQueue<Task>*)args;

  while(true)
  {
    // 制造任务
    // 生产者将任务传到缓冲区，消费者再将其消耗
    // 任务不一定有生产者制造，也可能通过外部获得
    int x = rand() % 10 + 1;
    usleep(rand() % 1000);  
    int y = rand() % 5 + 1;

    Task t(x, y, myAdd);
    // 发送任务
    bqueue->push(t);
    // 输出消息
    cout << pthread_self() << " productor: " << t._x << " + " << t._y << " = ?" << endl;
    sleep(1);
  }
  return nullptr;
}
